namespace inventarioWCF
{
    using System.Collections.Generic;
    using System.ServiceModel;

    /// <summary>
    /// servicioWCF Interface
    /// </summary>
    [ServiceContract]
	[CyclicReferencesAware(true)]
    public interface IservicioWCF
    {
		
        #region Colors CRUD Operations

        /// <summary>
        /// Create Color . 
        /// </summary>
        /// <param name="Color">Target Color.</param>
        /// <returns>return Color Id </returns>
        [OperationContract]
        string CreateColor(inventarioDAL.Color color);

        /// <summary>
        /// Read Colors.
        /// </summary>
        /// <param name="startIndex">Start Index.</param>
        /// <param name="count">Number of object that will be retreived.</param>
        /// <returns>List of Colors.</returns>
        [OperationContract]
        List<inventarioDAL.Color> ReadColors(int startIndex, int count);

		/// <summary>
        /// Reads Colors.
        /// </summary>
        /// <returns>List of Colors.</returns>
        [OperationContract]
        List<inventarioDAL.Color> ReadAllColors();
		
		/// <summary>
        /// Get Colors ID.
        /// </summary>
        /// <returns>Colors ID</returns>
		[OperationContract]
		string GetColorObjectId(inventarioDAL.Color color);
        
		/// <summary>
        /// Read Color.
        /// </summary>
        /// <param name="entityId">Color Id that will be read.</param>
        /// <returns>Target Color.</returns>
        [OperationContract]
        inventarioDAL.Color ReadColor(string entityId);

        /// <summary>
        /// Update Color.
        /// </summary>
        /// <param name="color">updated Color .</param>
        /// <returns>Updated Color Id .</returns>
        [OperationContract]
        string UpdateColor(inventarioDAL.Color color);

        /// <summary>
        /// Delete Color.
        /// </summary>
        /// <param name="entityId">Target Color Id.</param>
        /// <returns>Deleted Color Id.</returns>
        [OperationContract]
        string DeleteColorById(string entityId);
		
		/// <summary>
        /// Delete Color.
        /// </summary>
        /// <param name="entityId">Target Color.</param>
        /// <returns>Deleted Color.</returns>
        [OperationContract]
        string DeleteColor(inventarioDAL.Color color);
		
		/// <summary>
        /// Searches the Color.
        /// </summary>
        /// <param name="searchParameters">The search parameters.</param>
        /// <returns></returns>
        [OperationContract]
        List<inventarioDAL.Color> SearchColor(inventarioDAL.Color searchParameters);
        #endregion
		
        #region Gamas CRUD Operations

        /// <summary>
        /// Create Gama . 
        /// </summary>
        /// <param name="Gama">Target Gama.</param>
        /// <returns>return Gama Id </returns>
        [OperationContract]
        string CreateGama(inventarioDAL.Gama gama);

        /// <summary>
        /// Read Gamas.
        /// </summary>
        /// <param name="startIndex">Start Index.</param>
        /// <param name="count">Number of object that will be retreived.</param>
        /// <returns>List of Gamas.</returns>
        [OperationContract]
        List<inventarioDAL.Gama> ReadGamas(int startIndex, int count);

		/// <summary>
        /// Reads Gamas.
        /// </summary>
        /// <returns>List of Gamas.</returns>
        [OperationContract]
        List<inventarioDAL.Gama> ReadAllGamas();
		
		/// <summary>
        /// Get Gamas ID.
        /// </summary>
        /// <returns>Gamas ID</returns>
		[OperationContract]
		string GetGamaObjectId(inventarioDAL.Gama gama);
        
		/// <summary>
        /// Read Gama.
        /// </summary>
        /// <param name="entityId">Gama Id that will be read.</param>
        /// <returns>Target Gama.</returns>
        [OperationContract]
        inventarioDAL.Gama ReadGama(string entityId);

        /// <summary>
        /// Update Gama.
        /// </summary>
        /// <param name="gama">updated Gama .</param>
        /// <returns>Updated Gama Id .</returns>
        [OperationContract]
        string UpdateGama(inventarioDAL.Gama gama);

        /// <summary>
        /// Delete Gama.
        /// </summary>
        /// <param name="entityId">Target Gama Id.</param>
        /// <returns>Deleted Gama Id.</returns>
        [OperationContract]
        string DeleteGamaById(string entityId);
		
		/// <summary>
        /// Delete Gama.
        /// </summary>
        /// <param name="entityId">Target Gama.</param>
        /// <returns>Deleted Gama.</returns>
        [OperationContract]
        string DeleteGama(inventarioDAL.Gama gama);
		
		/// <summary>
        /// Searches the Gama.
        /// </summary>
        /// <param name="searchParameters">The search parameters.</param>
        /// <returns></returns>
        [OperationContract]
        List<inventarioDAL.Gama> SearchGama(inventarioDAL.Gama searchParameters);
        #endregion
		
        #region Lineas CRUD Operations

        /// <summary>
        /// Create Linea . 
        /// </summary>
        /// <param name="Linea">Target Linea.</param>
        /// <returns>return Linea Id </returns>
        [OperationContract]
        string CreateLinea(inventarioDAL.Linea linea);

        /// <summary>
        /// Read Lineas.
        /// </summary>
        /// <param name="startIndex">Start Index.</param>
        /// <param name="count">Number of object that will be retreived.</param>
        /// <returns>List of Lineas.</returns>
        [OperationContract]
        List<inventarioDAL.Linea> ReadLineas(int startIndex, int count);

		/// <summary>
        /// Reads Lineas.
        /// </summary>
        /// <returns>List of Lineas.</returns>
        [OperationContract]
        List<inventarioDAL.Linea> ReadAllLineas();
		
		/// <summary>
        /// Get Lineas ID.
        /// </summary>
        /// <returns>Lineas ID</returns>
		[OperationContract]
		string GetLineaObjectId(inventarioDAL.Linea linea);
        
		/// <summary>
        /// Read Linea.
        /// </summary>
        /// <param name="entityId">Linea Id that will be read.</param>
        /// <returns>Target Linea.</returns>
        [OperationContract]
        inventarioDAL.Linea ReadLinea(string entityId);

        /// <summary>
        /// Update Linea.
        /// </summary>
        /// <param name="linea">updated Linea .</param>
        /// <returns>Updated Linea Id .</returns>
        [OperationContract]
        string UpdateLinea(inventarioDAL.Linea linea);

        /// <summary>
        /// Delete Linea.
        /// </summary>
        /// <param name="entityId">Target Linea Id.</param>
        /// <returns>Deleted Linea Id.</returns>
        [OperationContract]
        string DeleteLineaById(string entityId);
		
		/// <summary>
        /// Delete Linea.
        /// </summary>
        /// <param name="entityId">Target Linea.</param>
        /// <returns>Deleted Linea.</returns>
        [OperationContract]
        string DeleteLinea(inventarioDAL.Linea linea);
		
		/// <summary>
        /// Searches the Linea.
        /// </summary>
        /// <param name="searchParameters">The search parameters.</param>
        /// <returns></returns>
        [OperationContract]
        List<inventarioDAL.Linea> SearchLinea(inventarioDAL.Linea searchParameters);
        #endregion
		
        #region Marcas CRUD Operations

        /// <summary>
        /// Create Marca . 
        /// </summary>
        /// <param name="Marca">Target Marca.</param>
        /// <returns>return Marca Id </returns>
        [OperationContract]
        string CreateMarca(inventarioDAL.Marca marca);

        /// <summary>
        /// Read Marcas.
        /// </summary>
        /// <param name="startIndex">Start Index.</param>
        /// <param name="count">Number of object that will be retreived.</param>
        /// <returns>List of Marcas.</returns>
        [OperationContract]
        List<inventarioDAL.Marca> ReadMarcas(int startIndex, int count);

		/// <summary>
        /// Reads Marcas.
        /// </summary>
        /// <returns>List of Marcas.</returns>
        [OperationContract]
        List<inventarioDAL.Marca> ReadAllMarcas();
		
		/// <summary>
        /// Get Marcas ID.
        /// </summary>
        /// <returns>Marcas ID</returns>
		[OperationContract]
		string GetMarcaObjectId(inventarioDAL.Marca marca);
        
		/// <summary>
        /// Read Marca.
        /// </summary>
        /// <param name="entityId">Marca Id that will be read.</param>
        /// <returns>Target Marca.</returns>
        [OperationContract]
        inventarioDAL.Marca ReadMarca(string entityId);

        /// <summary>
        /// Update Marca.
        /// </summary>
        /// <param name="marca">updated Marca .</param>
        /// <returns>Updated Marca Id .</returns>
        [OperationContract]
        string UpdateMarca(inventarioDAL.Marca marca);

        /// <summary>
        /// Delete Marca.
        /// </summary>
        /// <param name="entityId">Target Marca Id.</param>
        /// <returns>Deleted Marca Id.</returns>
        [OperationContract]
        string DeleteMarcaById(string entityId);
		
		/// <summary>
        /// Delete Marca.
        /// </summary>
        /// <param name="entityId">Target Marca.</param>
        /// <returns>Deleted Marca.</returns>
        [OperationContract]
        string DeleteMarca(inventarioDAL.Marca marca);
		
		/// <summary>
        /// Searches the Marca.
        /// </summary>
        /// <param name="searchParameters">The search parameters.</param>
        /// <returns></returns>
        [OperationContract]
        List<inventarioDAL.Marca> SearchMarca(inventarioDAL.Marca searchParameters);
        #endregion
		
        #region Presentacions CRUD Operations

        /// <summary>
        /// Create Presentacion . 
        /// </summary>
        /// <param name="Presentacion">Target Presentacion.</param>
        /// <returns>return Presentacion Id </returns>
        [OperationContract]
        string CreatePresentacion(inventarioDAL.Presentacion presentacion);

        /// <summary>
        /// Read Presentacions.
        /// </summary>
        /// <param name="startIndex">Start Index.</param>
        /// <param name="count">Number of object that will be retreived.</param>
        /// <returns>List of Presentacions.</returns>
        [OperationContract]
        List<inventarioDAL.Presentacion> ReadPresentacions(int startIndex, int count);

		/// <summary>
        /// Reads Presentacions.
        /// </summary>
        /// <returns>List of Presentacions.</returns>
        [OperationContract]
        List<inventarioDAL.Presentacion> ReadAllPresentacions();
		
		/// <summary>
        /// Get Presentacions ID.
        /// </summary>
        /// <returns>Presentacions ID</returns>
		[OperationContract]
		string GetPresentacionObjectId(inventarioDAL.Presentacion presentacion);
        
		/// <summary>
        /// Read Presentacion.
        /// </summary>
        /// <param name="entityId">Presentacion Id that will be read.</param>
        /// <returns>Target Presentacion.</returns>
        [OperationContract]
        inventarioDAL.Presentacion ReadPresentacion(string entityId);

        /// <summary>
        /// Update Presentacion.
        /// </summary>
        /// <param name="presentacion">updated Presentacion .</param>
        /// <returns>Updated Presentacion Id .</returns>
        [OperationContract]
        string UpdatePresentacion(inventarioDAL.Presentacion presentacion);

        /// <summary>
        /// Delete Presentacion.
        /// </summary>
        /// <param name="entityId">Target Presentacion Id.</param>
        /// <returns>Deleted Presentacion Id.</returns>
        [OperationContract]
        string DeletePresentacionById(string entityId);
		
		/// <summary>
        /// Delete Presentacion.
        /// </summary>
        /// <param name="entityId">Target Presentacion.</param>
        /// <returns>Deleted Presentacion.</returns>
        [OperationContract]
        string DeletePresentacion(inventarioDAL.Presentacion presentacion);
		
		/// <summary>
        /// Searches the Presentacion.
        /// </summary>
        /// <param name="searchParameters">The search parameters.</param>
        /// <returns></returns>
        [OperationContract]
        List<inventarioDAL.Presentacion> SearchPresentacion(inventarioDAL.Presentacion searchParameters);
        #endregion
		
        #region Productos CRUD Operations

        /// <summary>
        /// Create Producto . 
        /// </summary>
        /// <param name="Producto">Target Producto.</param>
        /// <returns>return Producto Id </returns>
        [OperationContract]
        string CreateProducto(inventarioDAL.Producto producto);

        /// <summary>
        /// Read Productos.
        /// </summary>
        /// <param name="startIndex">Start Index.</param>
        /// <param name="count">Number of object that will be retreived.</param>
        /// <returns>List of Productos.</returns>
        [OperationContract]
        List<inventarioDAL.Producto> ReadProductos(int startIndex, int count);

		/// <summary>
        /// Reads Productos.
        /// </summary>
        /// <returns>List of Productos.</returns>
        [OperationContract]
        List<inventarioDAL.Producto> ReadAllProductos();
		
		/// <summary>
        /// Get Productos ID.
        /// </summary>
        /// <returns>Productos ID</returns>
		[OperationContract]
		string GetProductoObjectId(inventarioDAL.Producto producto);
        
		/// <summary>
        /// Read Producto.
        /// </summary>
        /// <param name="entityId">Producto Id that will be read.</param>
        /// <returns>Target Producto.</returns>
        [OperationContract]
        inventarioDAL.Producto ReadProducto(string entityId);

        /// <summary>
        /// Update Producto.
        /// </summary>
        /// <param name="producto">updated Producto .</param>
        /// <returns>Updated Producto Id .</returns>
        [OperationContract]
        string UpdateProducto(inventarioDAL.Producto producto);

        /// <summary>
        /// Delete Producto.
        /// </summary>
        /// <param name="entityId">Target Producto Id.</param>
        /// <returns>Deleted Producto Id.</returns>
        [OperationContract]
        string DeleteProductoById(string entityId);
		
		/// <summary>
        /// Delete Producto.
        /// </summary>
        /// <param name="entityId">Target Producto.</param>
        /// <returns>Deleted Producto.</returns>
        [OperationContract]
        string DeleteProducto(inventarioDAL.Producto producto);
		
		/// <summary>
        /// Searches the Producto.
        /// </summary>
        /// <param name="searchParameters">The search parameters.</param>
        /// <returns></returns>
        [OperationContract]
        List<inventarioDAL.Producto> SearchProducto(inventarioDAL.Producto searchParameters);
        #endregion
		
        #region Proveedors CRUD Operations

        /// <summary>
        /// Create Proveedor . 
        /// </summary>
        /// <param name="Proveedor">Target Proveedor.</param>
        /// <returns>return Proveedor Id </returns>
        [OperationContract]
        string CreateProveedor(inventarioDAL.Proveedor proveedor);

        /// <summary>
        /// Read Proveedors.
        /// </summary>
        /// <param name="startIndex">Start Index.</param>
        /// <param name="count">Number of object that will be retreived.</param>
        /// <returns>List of Proveedors.</returns>
        [OperationContract]
        List<inventarioDAL.Proveedor> ReadProveedors(int startIndex, int count);

		/// <summary>
        /// Reads Proveedors.
        /// </summary>
        /// <returns>List of Proveedors.</returns>
        [OperationContract]
        List<inventarioDAL.Proveedor> ReadAllProveedors();
		
		/// <summary>
        /// Get Proveedors ID.
        /// </summary>
        /// <returns>Proveedors ID</returns>
		[OperationContract]
		string GetProveedorObjectId(inventarioDAL.Proveedor proveedor);
        
		/// <summary>
        /// Read Proveedor.
        /// </summary>
        /// <param name="entityId">Proveedor Id that will be read.</param>
        /// <returns>Target Proveedor.</returns>
        [OperationContract]
        inventarioDAL.Proveedor ReadProveedor(string entityId);

        /// <summary>
        /// Update Proveedor.
        /// </summary>
        /// <param name="proveedor">updated Proveedor .</param>
        /// <returns>Updated Proveedor Id .</returns>
        [OperationContract]
        string UpdateProveedor(inventarioDAL.Proveedor proveedor);

        /// <summary>
        /// Delete Proveedor.
        /// </summary>
        /// <param name="entityId">Target Proveedor Id.</param>
        /// <returns>Deleted Proveedor Id.</returns>
        [OperationContract]
        string DeleteProveedorById(string entityId);
		
		/// <summary>
        /// Delete Proveedor.
        /// </summary>
        /// <param name="entityId">Target Proveedor.</param>
        /// <returns>Deleted Proveedor.</returns>
        [OperationContract]
        string DeleteProveedor(inventarioDAL.Proveedor proveedor);
		
		/// <summary>
        /// Searches the Proveedor.
        /// </summary>
        /// <param name="searchParameters">The search parameters.</param>
        /// <returns></returns>
        [OperationContract]
        List<inventarioDAL.Proveedor> SearchProveedor(inventarioDAL.Proveedor searchParameters);
        #endregion
		
        #region Tipos CRUD Operations

        /// <summary>
        /// Create Tipo . 
        /// </summary>
        /// <param name="Tipo">Target Tipo.</param>
        /// <returns>return Tipo Id </returns>
        [OperationContract]
        string CreateTipo(inventarioDAL.Tipo tipo);

        /// <summary>
        /// Read Tipos.
        /// </summary>
        /// <param name="startIndex">Start Index.</param>
        /// <param name="count">Number of object that will be retreived.</param>
        /// <returns>List of Tipos.</returns>
        [OperationContract]
        List<inventarioDAL.Tipo> ReadTipos(int startIndex, int count);

		/// <summary>
        /// Reads Tipos.
        /// </summary>
        /// <returns>List of Tipos.</returns>
        [OperationContract]
        List<inventarioDAL.Tipo> ReadAllTipos();
		
		/// <summary>
        /// Get Tipos ID.
        /// </summary>
        /// <returns>Tipos ID</returns>
		[OperationContract]
		string GetTipoObjectId(inventarioDAL.Tipo tipo);
        
		/// <summary>
        /// Read Tipo.
        /// </summary>
        /// <param name="entityId">Tipo Id that will be read.</param>
        /// <returns>Target Tipo.</returns>
        [OperationContract]
        inventarioDAL.Tipo ReadTipo(string entityId);

        /// <summary>
        /// Update Tipo.
        /// </summary>
        /// <param name="tipo">updated Tipo .</param>
        /// <returns>Updated Tipo Id .</returns>
        [OperationContract]
        string UpdateTipo(inventarioDAL.Tipo tipo);

        /// <summary>
        /// Delete Tipo.
        /// </summary>
        /// <param name="entityId">Target Tipo Id.</param>
        /// <returns>Deleted Tipo Id.</returns>
        [OperationContract]
        string DeleteTipoById(string entityId);
		
		/// <summary>
        /// Delete Tipo.
        /// </summary>
        /// <param name="entityId">Target Tipo.</param>
        /// <returns>Deleted Tipo.</returns>
        [OperationContract]
        string DeleteTipo(inventarioDAL.Tipo tipo);
		
		/// <summary>
        /// Searches the Tipo.
        /// </summary>
        /// <param name="searchParameters">The search parameters.</param>
        /// <returns></returns>
        [OperationContract]
        List<inventarioDAL.Tipo> SearchTipo(inventarioDAL.Tipo searchParameters);
        #endregion
		
        #region Unidadmedidas CRUD Operations

        /// <summary>
        /// Create Unidadmedida . 
        /// </summary>
        /// <param name="Unidadmedida">Target Unidadmedida.</param>
        /// <returns>return Unidadmedida Id </returns>
        [OperationContract]
        string CreateUnidadmedida(inventarioDAL.Unidadmedida unidadmedida);

        /// <summary>
        /// Read Unidadmedidas.
        /// </summary>
        /// <param name="startIndex">Start Index.</param>
        /// <param name="count">Number of object that will be retreived.</param>
        /// <returns>List of Unidadmedidas.</returns>
        [OperationContract]
        List<inventarioDAL.Unidadmedida> ReadUnidadmedidas(int startIndex, int count);

		/// <summary>
        /// Reads Unidadmedidas.
        /// </summary>
        /// <returns>List of Unidadmedidas.</returns>
        [OperationContract]
        List<inventarioDAL.Unidadmedida> ReadAllUnidadmedidas();
		
		/// <summary>
        /// Get Unidadmedidas ID.
        /// </summary>
        /// <returns>Unidadmedidas ID</returns>
		[OperationContract]
		string GetUnidadmedidaObjectId(inventarioDAL.Unidadmedida unidadmedida);
        
		/// <summary>
        /// Read Unidadmedida.
        /// </summary>
        /// <param name="entityId">Unidadmedida Id that will be read.</param>
        /// <returns>Target Unidadmedida.</returns>
        [OperationContract]
        inventarioDAL.Unidadmedida ReadUnidadmedida(string entityId);

        /// <summary>
        /// Update Unidadmedida.
        /// </summary>
        /// <param name="unidadmedida">updated Unidadmedida .</param>
        /// <returns>Updated Unidadmedida Id .</returns>
        [OperationContract]
        string UpdateUnidadmedida(inventarioDAL.Unidadmedida unidadmedida);

        /// <summary>
        /// Delete Unidadmedida.
        /// </summary>
        /// <param name="entityId">Target Unidadmedida Id.</param>
        /// <returns>Deleted Unidadmedida Id.</returns>
        [OperationContract]
        string DeleteUnidadmedidaById(string entityId);
		
		/// <summary>
        /// Delete Unidadmedida.
        /// </summary>
        /// <param name="entityId">Target Unidadmedida.</param>
        /// <returns>Deleted Unidadmedida.</returns>
        [OperationContract]
        string DeleteUnidadmedida(inventarioDAL.Unidadmedida unidadmedida);
		
		/// <summary>
        /// Searches the Unidadmedida.
        /// </summary>
        /// <param name="searchParameters">The search parameters.</param>
        /// <returns></returns>
        [OperationContract]
        List<inventarioDAL.Unidadmedida> SearchUnidadmedida(inventarioDAL.Unidadmedida searchParameters);
        #endregion
		
        #region Usos CRUD Operations

        /// <summary>
        /// Create Uso . 
        /// </summary>
        /// <param name="Uso">Target Uso.</param>
        /// <returns>return Uso Id </returns>
        [OperationContract]
        string CreateUso(inventarioDAL.Uso uso);

        /// <summary>
        /// Read Usos.
        /// </summary>
        /// <param name="startIndex">Start Index.</param>
        /// <param name="count">Number of object that will be retreived.</param>
        /// <returns>List of Usos.</returns>
        [OperationContract]
        List<inventarioDAL.Uso> ReadUsos(int startIndex, int count);

		/// <summary>
        /// Reads Usos.
        /// </summary>
        /// <returns>List of Usos.</returns>
        [OperationContract]
        List<inventarioDAL.Uso> ReadAllUsos();
		
		/// <summary>
        /// Get Usos ID.
        /// </summary>
        /// <returns>Usos ID</returns>
		[OperationContract]
		string GetUsoObjectId(inventarioDAL.Uso uso);
        
		/// <summary>
        /// Read Uso.
        /// </summary>
        /// <param name="entityId">Uso Id that will be read.</param>
        /// <returns>Target Uso.</returns>
        [OperationContract]
        inventarioDAL.Uso ReadUso(string entityId);

        /// <summary>
        /// Update Uso.
        /// </summary>
        /// <param name="uso">updated Uso .</param>
        /// <returns>Updated Uso Id .</returns>
        [OperationContract]
        string UpdateUso(inventarioDAL.Uso uso);

        /// <summary>
        /// Delete Uso.
        /// </summary>
        /// <param name="entityId">Target Uso Id.</param>
        /// <returns>Deleted Uso Id.</returns>
        [OperationContract]
        string DeleteUsoById(string entityId);
		
		/// <summary>
        /// Delete Uso.
        /// </summary>
        /// <param name="entityId">Target Uso.</param>
        /// <returns>Deleted Uso.</returns>
        [OperationContract]
        string DeleteUso(inventarioDAL.Uso uso);
		
		/// <summary>
        /// Searches the Uso.
        /// </summary>
        /// <param name="searchParameters">The search parameters.</param>
        /// <returns></returns>
        [OperationContract]
        List<inventarioDAL.Uso> SearchUso(inventarioDAL.Uso searchParameters);
        #endregion
    }
}